package org.lvgo.singleton.lazy;

/**
 * 这个模式综合使用了Java的类级内部类和多线程缺省同步锁的知识，
 * 很巧妙地同时实现了延迟加载和线程安全。同时不受jdk版本的影响。
 * <p>
 * 内部类分为对象级别和类级别
 * 类级内部类指的是，有static修饰的成员变量的内部类。
 * 如果没有static修饰的成员变量的内部类被称为对象级内部类。
 * <p>
 * 类级内部类相当于其外部类的static成员，它的对象与外部类对象间不存在依赖关系，相互独立，因此可直接创建。
 * 而对象级内部类的实例，是必须绑定在外部对象实例上的。类级内部类只有在第一次被使用的时候才被会装载。
 * <p>
 * 推荐大家一篇Java内部类学习文章.
 * https://blog.csdn.net/sinat_34344123/article/details/81942427
 *
 * @author lvgo
 * @version 1.0
 * @Description: 内部类懒加载, 线程安全
 * @date 18-8-22 上午11:51
 */
public class InternalClassSingleton {

    private InternalClassSingleton() {
    }

    public static InternalClassSingleton getInstance() {
        return SingletonHelper.INTERNAL_CLASS_SINGLETON;
    }

    private static class SingletonHelper {

        private static final InternalClassSingleton INTERNAL_CLASS_SINGLETON = new InternalClassSingleton();
    }
}
